package trabalhothreads;

import java.util.LinkedList;
import java.util.Queue;

public class Fila {

    private int limite = 99;
    private Queue filaQueue = new LinkedList();

    public Fila() {
    }

    public void setLimite(int limite) {
        this.limite = limite;
    }

    synchronized void get() {
        //try {
            if (this.getFila().size() > 0) {
                System.out.println("Foi chamado um CLiente para ser atendido" + ((Pessoa) this.getFila().peek()).getNome() + "restam na fila" + (this.getFila().size()-1));
               // wait();
                this.Remove();
            } else {
                //wait(10);
            }
       // } catch (InterruptedException e) {
            //System.out.println("InterruptedException caught");
       // }
        //notifyAll();
    }

    synchronized void put() {
         //   try {
                if (this.getFila().size() > this.getLimite()) {
                   // wait(10);
                } else {
                    Pessoa tmp = new Pessoa();
                    this.Adiciona(tmp);
                    //wait();
                    System.out.println("Chegou Cliente na FILA " + tmp.getNome() + " é o Cliente Numero " + this.getFila().size());
                }
            //} catch (InterruptedException e) {
              //  System.out.println("InterruptedException caught");
           // }
        //notifyAll();
    }

    public Queue getFila() {
        return filaQueue;
    }

    public int getLimite() {
        return limite;
    }

    public boolean Adiciona(Object obj) {
        if (filaQueue.size() <= this.limite) {
            filaQueue.add(obj);
            return true;
        } else {
            return false;
        }
    }

    public boolean Remove() {
        if (filaQueue.size() > 0) {
            filaQueue.poll();
            return true;
        } else {
            return false;
        }
    }
}